package com.ctshk.rpc.order.hotel.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.vo.OrderRefundDTO;
import com.ctshk.rpc.order.hotel.dto.HotelOrderDetailDTO;
import com.ctshk.rpc.order.hotel.dto.HotelOrderPageDTO;
import com.ctshk.rpc.order.hotel.req.HotelCancelOrderReq;
import com.ctshk.rpc.order.hotel.req.HotelOrderPageReq;
import com.ctshk.rpc.order.hotel.req.HotelOrderTouristReq;

import java.math.BigDecimal;
import java.util.List;


/**
 * @description 酒店订单表 服务类
 * @author 谢诗宏
 * @date 2021/5/10
 */
public interface IHotelOrderCenterService {

    /**
     * 酒店订单列表
     * @param hotelOrderPageReq
     * @return
     */
    PageResponse<HotelOrderPageDTO> queyList(HotelOrderPageReq hotelOrderPageReq, long userId);

    /**
     * 根据订单id查询订单详细信息
     *
     * @param id 订单id
     * @return 订单消息
     */
    HotelOrderDetailDTO queryDetail(long id);

    /**
     * 取消订单
     * @param cancelOrderReq
     * @param userId
     */
    Result cancelOrder(HotelCancelOrderReq cancelOrderReq, long userId);

    /**
     * 审批
     * @param approvalId
     * @param userId
     * @param status
     * @param comments
     * @param extendParams
     * @return
     */
    Long check(long approvalId, long userId, int status, String comments, String extendParams, BigDecimal actualRefundAmount);

    /**
     * 确认订单
     * @param id
     * @param confirmNumber
     * @param userId
     * @return
     */
    Long confirmOrder(long id, String confirmNumber, long userId);

    /**
     * 获取最大可退款金额
     * @param id
     * @return
     */
    BigDecimal refundAmount(long id);

    /**
     * 财务退款驳回-(内部财务中心调用)
     * @param collectionNumber      收款单号,必填
     * @param userId                操作用户,必填
     * @param status                状态(1=完成,2=驳回),必填
     * @param rejectInfo            驳回信息,选填
     * @return
     */
    Result finaceReject(String collectionNumber, long userId, Integer status, String rejectInfo);

    /**
     * 预订状态确认与取消-(内部预订中心调用)
     * @param orderNumber   订单号,必填
     * @param status        预订中心状态(2=確認預訂,3=確認取消),必填
     * @param userId        操作用户,必填
     * @return
     */
    Result supplierConfirmOrder(String orderNumber, Integer status, long userId);

    /**
     * 删除退款记录
     * @param id
     * @return
     */
    Long delRefund(long id, long userId);

    /**
     * 收款再次确认
     * @param id
     * @return
     */
    Long reconfirm(long id, long userId);

    /**
     * 确认退款
     * @param id
     * @return
     */
    Long confirmRefund(long id, long userId);

    /**
     * 财务中心-操作退款
     * @param refundNumber
     * @param userId
     * @return
     */
    Result financeConfirmRefund(String refundNumber,Long userId);

    /**
     * 财务中心-退款列表
     * @param orderId
     * @return
     */
    Result<List<OrderRefundDTO>> financeRefundList(Long orderId);

    /**
     * 修改旅客
     * @param reqs       旅客信息
     * @param id        订单id
     * @return
     */
    Long modifyTourist(List<HotelOrderTouristReq> reqs, long id, long userId);

}
